package com.tedu.api.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set接口是Collection接口的子接口
 * Set接口存储数据，特点:无序，无下标，元素不可以重复
 * 子实现类:存null,不可以存null
 * 常用方法:Set接口的方法继承于Collection 接口
 * add()增加  remove()删除  contains()   size()   clear()清空
 * 迭代器；Iterator  进行遍历集合
 * 具体实现类：
 * 1.HashSet【常用】：由哈希算法实现保存数据集合
 * 特点:不保证元素顺序,不允许元素重复,可以存null值
 * Set的方法 HashSet 方法一致
 * 2.LinkedHashSet【偶尔】：可以存在null，不允许重复，但是能保证你的元素顺序
 * 3.TreeSet【🐓本不】：不许重复，不许存null值，保证了顺序，有个比较器能排序元素
 *                    内存存储，线程非常安全
 */
public class SetAPI {
      @Test
    public void testSet(){
          //创建Set集合---多态方法(父类子类都可以调用)
          Set<String> set=new HashSet<>();//导包
          //添加元素  add()父类Set的方法|子类HashSet add()父子都有add,则调用子类重写
          set.add(new String("铁铠冥魂·莫德凯撒")); set.add(new String("沙漠玫瑰·莎弥拉"));
          set.add(new String("诺克萨斯统领·斯维因")); set.add(new String("亡灵战神·塞恩"));
          set.add(new String("诡术妖姬·乐芙兰")); set.add(new String("不祥之刃·卡特琳娜"));
          set.add(new String("猩红收割者·弗拉基米尔")); set.add(new String("暴怒骑士·克烈"));
          set.add(new String("诺克萨斯之手·德莱厄斯")); set.add(new String("邪恶小法师·维迦"));
          set.add(new String("荣耀行刑官·德莱文")); set.add(new String("狂厄蔷薇·贝蕾亚"));
          set.add(new String("刀锋之影·泰隆"));
          set.add(new String("放逐之刃·锐雯"));
          System.out.println("诺克萨斯集合打印："+set);
          set.remove("铁铠冥魂·莫德凯撒");//返回值:boolean
          System.out.println("铁男打赢复活赛前删除Set集合元素："+set);
          boolean b=set.contains("铁铠冥魂·莫德凯撒");//返回值在前面加
          System.out.println("莫德凯撒打赢复活赛了判断元素是否存在Set集合中："+b);
          System.out.println("铁男复活前Set集合元素个数："+set.size());//set.size()是数元素个数的
          // set.clear();
          System.out.println("德玛西亚灭掉后的诺克萨斯是否清空Set集合"+set);
          //使用Iterator 遍历Set集合数据
          //1.通过Set集合 调用 iterator() 返回:Iterator实例[迭代器对象]
          Iterator<String> it=set.iterator();//就这样搞
          //2.遵循迭代器使用规则 问 取 删  删除null值
          while(it.hasNext()){
              String str=it.next();
              if(str==null){//引用类型【对象】:null值
                  it.remove();//删除
              }
          }
          //3.迭代器中打印元素 数据
          System.out.println("打印"+set);



      }

}
